home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 3.iso / dist / fw_qt3.idb / usr / freeware / Qt / include / qapplication.h.z / qapplication.h
C/C++ Source or Header  |  2002-04-08  |  14KB  |  485 lines

  1. /****************************************************************************
  2. ** $Id:  qt/qapplication.h   3.0.3   edited Dec 7 10:36 $
  3. **
  4. ** Definition of QApplication class
  5. **
  6. ** Created : 931107
  7. **
  8. ** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
  9. **
  10. ** This file is part of the kernel module of the Qt GUI Toolkit.
  11. **
  12. ** This file may be distributed under the terms of the Q Public License
  13. ** as defined by Trolltech AS of Norway and appearing in the file
  14. ** LICENSE.QPL included in the packaging of this file.
  15. **
  16. ** This file may be distributed and/or modified under the terms of the
  17. ** GNU General Public License version 2 as published by the Free Software
  18. ** Foundation and appearing in the file LICENSE.GPL included in the
  19. ** packaging of this file.
  20. **
  21. ** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
  22. ** licenses may use this file in accordance with the Qt Commercial License
  23. ** Agreement provided with the Software.
  24. **
  25. ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
  26. ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  27. **
  28. ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
  29. **   information about Qt Commercial License Agreements.
  30. ** See http://www.trolltech.com/qpl/ for QPL licensing information.
  31. ** See http://www.trolltech.com/gpl/ for GPL licensing information.
  32. **
  33. ** Contact info@trolltech.com if any conditions of this licensing are
  34. ** not clear to you.
  35. **
  36. **********************************************************************/
  37.  
  38. #ifndef QAPPLICATION_H
  39. #define QAPPLICATION_H
  40.  
  41. #ifndef QT_H
  42. #include "qdesktopwidget.h"
  43. #include "qasciidict.h"
  44. #include "qpalette.h"
  45. #include "qtranslator.h"
  46. #include "qstrlist.h"
  47. #include "qstringlist.h"
  48. #endif // QT_H
  49.  
  50. #ifndef QT_NO_REMOTE
  51. #include "quuid.h"
  52. #endif //QT_NO_REMOTE
  53.  
  54. class QSessionManager;
  55. class QStyle;
  56. class QTranslator;
  57. #if defined(Q_WS_QWS)
  58. class QWSDecoration;
  59. #endif
  60.  
  61. template <class type> class QPtrList;
  62.  
  63. class QApplication;
  64. extern Q_EXPORT QApplication *qApp;        // global application object
  65.  
  66. #if defined(QT_THREAD_SUPPORT)
  67. class QMutex;
  68. #endif
  69.  
  70.  
  71. class Q_EXPORT QApplication : public QObject
  72. {
  73.     Q_OBJECT
  74. public:
  75.     QApplication( int &argc, char **argv);
  76.     QApplication( int &argc, char **argv, bool GUIenabled );
  77.     enum Type { Tty, GuiClient, GuiServer };
  78.     QApplication( int &argc, char **argv, Type );
  79. #if defined(Q_WS_X11)
  80.     QApplication( Display* dpy, HANDLE visual = 0, HANDLE cmap = 0 );
  81.     QApplication( Display *dpy, int argc, char **argv,
  82.           HANDLE visual = 0, HANDLE cmap= 0 );
  83. #endif
  84.     virtual ~QApplication();
  85.  
  86.     int            argc()    const;
  87.     char      **argv()    const;
  88.  
  89.     Type type() const;
  90.  
  91. #ifndef QT_NO_STYLE
  92.     static QStyle  &style();
  93.     static void        setStyle( QStyle* );
  94.     static QStyle*  setStyle( const QString& );
  95. #endif
  96. #ifndef Q_QDOC
  97.     enum ColorMode { NormalColors, CustomColors };
  98.     static ColorMode colorMode();
  99.     static void      setColorMode( QApplication::ColorMode );
  100. #endif
  101.  
  102.     enum ColorSpec { NormalColor=0, CustomColor=1, ManyColor=2 };
  103.     static int         colorSpec();
  104.     static void      setColorSpec( int );
  105. #ifndef QT_NO_CURSOR
  106.     static QCursor  *overrideCursor();
  107.     static void         setOverrideCursor( const QCursor &, bool replace=FALSE );
  108.     static void         restoreOverrideCursor();
  109. #endif
  110.     static bool         hasGlobalMouseTracking();
  111.     static void         setGlobalMouseTracking( bool enable );
  112. #ifndef QT_NO_PALETTE
  113.     static QPalette  palette( const QWidget* = 0 );
  114.     static void         setPalette( const QPalette &, bool informWidgets=FALSE,
  115.                  const char* className = 0 );
  116. #endif
  117.     static QFont     font( const QWidget* = 0 );
  118.     static void         setFont( const QFont &, bool informWidgets=FALSE,
  119.                   const char* className = 0 );
  120.     static QFontMetrics fontMetrics();
  121.  
  122.     QWidget        *mainWidget()  const;
  123.     virtual void     setMainWidget( QWidget * );
  124.     virtual void     polish( QWidget * );
  125.  
  126.     static QWidgetList *allWidgets();
  127.     static QWidgetList *topLevelWidgets();
  128.  
  129.     static QDesktopWidget   *desktop();
  130.  
  131.     static QWidget     *activePopupWidget();
  132.     static QWidget     *activeModalWidget();
  133. #ifndef QT_NO_CLIPBOARD
  134.     static QClipboard  *clipboard();
  135. #endif
  136.     QWidget           *focusWidget() const;
  137.     QWidget           *activeWindow() const;
  138.  
  139.     static QWidget  *widgetAt( int x, int y, bool child=FALSE );
  140.     static QWidget  *widgetAt( const QPoint &, bool child=FALSE );
  141.  
  142.     int             exec();
  143.     void         processEvents();
  144.     void         processEvents( int maxtime );
  145.     void         processOneEvent();
  146.     bool         hasPendingEvents();
  147.     int             enter_loop();
  148.     void         exit_loop();
  149.     int             loopLevel() const;
  150.     static void         exit( int retcode=0 );
  151.  
  152.     static bool         sendEvent( QObject *receiver, QEvent *event );
  153.     static void         postEvent( QObject *receiver, QEvent *event );
  154.     static void         sendPostedEvents( QObject *receiver, int event_type );
  155.     static void         sendPostedEvents();
  156.  
  157.     static void      removePostedEvents( QObject *receiver );
  158.  
  159.     virtual bool     notify( QObject *, QEvent * );
  160.  
  161.     static bool         startingUp();
  162.     static bool         closingDown();
  163.  
  164.     static void         flushX();
  165.     static void flush();
  166.     static void         syncX();
  167.  
  168.     static void         beep();
  169.  
  170. #ifndef QT_NO_TRANSLATION
  171.     void         setDefaultCodec( QTextCodec * );
  172.     QTextCodec*         defaultCodec() const;
  173.     void         installTranslator( QTranslator * );
  174.     void         removeTranslator( QTranslator * );
  175. #endif
  176.     enum Encoding { DefaultCodec, UnicodeUTF8 };
  177.     QString         translate( const char * context,
  178.                 const char * key,
  179.                 const char * comment = 0,
  180.                 Encoding encoding = DefaultCodec ) const;
  181. #ifndef QT_NO_PALETTE
  182.     // obsolete functions
  183.     static void      setWinStyleHighlightColor( const QColor &c ) {
  184.     QPalette p( palette() );
  185.     p.setColor( QColorGroup::Highlight, c );
  186.     setPalette( p, TRUE);
  187.     }
  188.     static const QColor &winStyleHighlightColor() {
  189.     return palette().active().highlight();
  190.     }
  191. #endif
  192.     static void      setDesktopSettingsAware( bool );
  193.     static bool      desktopSettingsAware();
  194.  
  195.     static void      setCursorFlashTime( int );
  196.     static int       cursorFlashTime();
  197.  
  198.     static void      setDoubleClickInterval( int );
  199.     static int       doubleClickInterval();
  200. #ifndef QT_NO_WHEELEVENT
  201.     static void      setWheelScrollLines( int );
  202.     static int       wheelScrollLines();
  203. #endif
  204.     static void         setGlobalStrut( const QSize & );
  205.     static QSize     globalStrut();
  206.  
  207. #ifndef QT_NO_COMPONENT
  208.     static void      setLibraryPaths(const QStringList &);
  209.     static QStringList libraryPaths();
  210.     static void      addLibraryPath(const QString &);
  211.     static void      removeLibraryPath(const QString &);
  212. #endif //QT_NO_COMPONENT
  213.     static void setStartDragTime( int ms );
  214.     static int startDragTime();
  215.     static void setStartDragDistance( int l );
  216.     static int startDragDistance();
  217.  
  218.     static void setReverseLayout( bool b );
  219.     static bool reverseLayout();
  220.  
  221.     static int horizontalAlignment( int align );
  222.  
  223.     static bool        isEffectEnabled( Qt::UIEffect );
  224.     static void        setEffectEnabled( Qt::UIEffect, bool enable = TRUE );
  225.  
  226. #if defined(Q_WS_MAC)
  227.     virtual bool     macEventFilter( EventRef );
  228. #endif
  229. #if defined(Q_WS_WIN)
  230.     virtual bool     winEventFilter( MSG * );
  231. #endif
  232. #if defined(Q_WS_X11)
  233.     virtual bool     x11EventFilter( XEvent * );
  234.     virtual int         x11ClientMessage( QWidget*, XEvent*, bool passive_only);
  235.     int              x11ProcessEvent( XEvent* );
  236. #endif
  237. #if defined(Q_WS_QWS)
  238.     virtual bool     qwsEventFilter( QWSEvent * );
  239.     int              qwsProcessEvent( QWSEvent* );
  240.     void             qwsSetCustomColors( QRgb *colortable, int start, int numColors );
  241. #ifndef QT_NO_QWS_MANAGER
  242.     static QWSDecoration &qwsDecoration();
  243.     static void      qwsSetDecoration( QWSDecoration *);
  244. #endif
  245. #endif
  246.  
  247. #if defined(Q_WS_WIN)
  248.     static WindowsVersion winVersion();
  249.     void         winFocus( QWidget *, bool );
  250.     static void         winMouseButtonUp();
  251. #endif
  252.  
  253. #ifndef QT_NO_SESSIONMANAGER
  254.     // session management
  255.     bool         isSessionRestored() const;
  256.     QString         sessionId() const;
  257.     virtual void     commitData( QSessionManager& sm );
  258.     virtual void     saveState( QSessionManager& sm );
  259. #endif
  260. #if defined(Q_WS_X11)
  261.     static void create_xim();
  262.     static void close_xim();
  263.     static bool x11_apply_settings();
  264. #endif
  265.     void         wakeUpGuiThread();
  266. #if defined(QT_THREAD_SUPPORT)
  267.     void         lock();
  268.     void         unlock(bool wakeUpGui = TRUE);
  269.     bool         locked();
  270.     bool             tryLock();
  271. #endif
  272.  
  273. signals:
  274.     void         lastWindowClosed();
  275.     void         aboutToQuit();
  276.     void         guiThreadAwake();
  277.  
  278. public slots:
  279.     void         quit();
  280.     void         closeAllWindows();
  281.  
  282. private:
  283.     void         construct( int &argc, char **argv, Type );
  284.     bool         processNextEvent( bool );
  285.     void         initialize( int, char ** );
  286.     void         init_precmdline();
  287.     void         process_cmdline( int* argcptr, char ** argv );
  288.     bool         internalNotify( QObject *, QEvent * );
  289. #if defined(Q_WS_QWS)
  290.     static QWidget *findChildWidget( const QWidget *p, const QPoint &pos );
  291.     static QWidget *findWidget( const QObjectList&, const QPoint &, bool rec );
  292. #endif
  293.  
  294. #if defined(Q_WS_MAC)
  295.     bool         do_mouse_down(Point *);
  296.     static QMAC_PASCAL OSStatus globalEventProcessor(EventHandlerCallRef,  EventRef, void *);
  297.     static QMAC_PASCAL void qt_context_timer_callbk(EventLoopTimerRef, void *);
  298.     static QMAC_PASCAL void qt_select_timer_callbk(EventLoopTimerRef, void *);
  299.     static bool qt_mac_apply_settings();
  300.     friend class QMacInputMethod;
  301.     friend bool qt_set_socket_handler( int, int, QObject *, bool);
  302.     friend void qt_mac_destroy_widget(QWidget *);
  303.     friend void qt_init(int *, char **, QApplication::Type);
  304. #endif
  305.  
  306. #if defined(QT_THREAD_SUPPORT)
  307.     static QMutex * qt_mutex;
  308. #endif
  309.  
  310.     int             app_argc;
  311.     char       **app_argv;
  312.     bool         quit_now;
  313.     int             quit_code;
  314.     static QStyle   *app_style;
  315.     static int         app_cspec;
  316. #ifndef QT_NO_PALETTE
  317.     static QPalette *app_pal;
  318. #endif
  319.     static QFont    *app_font;
  320. #ifndef QT_NO_CURSOR
  321.     static QCursor  *app_cursor;
  322. #endif
  323.     static int         app_tracking;
  324.     static bool         is_app_running;
  325.     static bool         is_app_closing;
  326.     static bool         app_exit_loop;
  327.     static int         loop_level;
  328.     static QWidget  *main_widget;
  329.     static QWidget  *focus_widget;
  330.     static QWidget  *active_window;
  331.     static bool         obey_desktop_settings;
  332.     static int         cursor_flash_time;
  333.     static int         mouse_double_click_time;
  334.     static int         wheel_scroll_lines;
  335.  
  336.     static bool         animate_ui;
  337.     static bool         animate_menu;
  338.     static bool         animate_tooltip;
  339.     static bool         animate_combo;
  340.     static bool         fade_menu;
  341.     static bool         fade_tooltip;
  342.  
  343.     QPtrList<QTranslator> *translators;
  344. #ifndef QT_NO_SESSIONMANAGER
  345.     QSessionManager *session_manager;
  346.     QString         session_id;
  347.     bool         is_session_restored;
  348. #endif
  349. #if defined(Q_WS_X11) && !defined (QT_NO_STYLE )
  350.     static void x11_initialize_style();
  351. #endif
  352.  
  353.     static QSize     app_strut;
  354.  
  355.     static QStringList *app_libpaths;
  356.  
  357.     static QAsciiDict<QPalette> *app_palettes;
  358.     static QAsciiDict<QFont>    *app_fonts;
  359.  
  360.     static QWidgetList *popupWidgets;
  361.     bool         inPopupMode() const;
  362.     void         closePopup( QWidget *popup );
  363.     void         openPopup( QWidget *popup );
  364.     void         setActiveWindow( QWidget* act );
  365.  
  366.     static bool      sendSpontaneousEvent( QObject *receiver, QEvent *event );
  367.     static void      removePostedEvent( QEvent * );
  368.  
  369.     friend class QWidget;
  370.     friend class QETWidget;
  371.     friend class QEvent;
  372.     friend Q_EXPORT void qt_ucm_initialize( QApplication * );
  373. #if defined(Q_WS_WIN)
  374.     friend bool qt_sendSpontaneousEvent( QObject*, QEvent* );
  375. #endif
  376.  
  377. #ifndef QT_NO_REMOTE
  378. public:
  379.     void setEnableRemoteControl(bool enable, const QUuid appId = QUuid());
  380.     bool remoteControlEnabled() const;
  381.     QUuid applicationId() const;
  382. #endif //QT_NO_REMOTE
  383.  
  384. private: // Disabled copy constructor and operator=
  385. #if defined(Q_DISABLE_COPY)
  386.     QApplication( const QApplication & );
  387.     QApplication &operator=( const QApplication & );
  388. #endif
  389. };
  390.  
  391. inline int QApplication::argc() const
  392. {
  393.     return app_argc;
  394. }
  395.  
  396. inline char **QApplication::argv() const
  397. {
  398.     return app_argv;
  399. }
  400. #ifndef QT_NO_CURSOR
  401. inline QCursor *QApplication::overrideCursor()
  402. {
  403.     return app_cursor;
  404. }
  405. #endif
  406. inline bool QApplication::hasGlobalMouseTracking()
  407. {
  408.     return app_tracking > 0;
  409. }
  410.  
  411. inline QWidget *QApplication::mainWidget() const
  412. {
  413.     return main_widget;
  414. }
  415.  
  416. inline QWidget *QApplication::focusWidget() const
  417. {
  418.     return focus_widget;
  419. }
  420.  
  421. inline QWidget *QApplication::activeWindow() const
  422. {
  423.     return active_window;
  424. }
  425.  
  426. inline QWidget *QApplication::widgetAt( const QPoint &p, bool child )
  427. {
  428.     return widgetAt( p.x(), p.y(), child );
  429. }
  430.  
  431. inline bool QApplication::inPopupMode() const
  432. {
  433.     return popupWidgets != 0;
  434. }
  435. #ifndef QT_NO_SESSIONMANAGER
  436. inline bool QApplication::isSessionRestored() const
  437. {
  438.     return is_session_restored;
  439. }
  440.  
  441. inline QString QApplication::sessionId() const
  442. {
  443.     return session_id;
  444. }
  445. #endif
  446. inline QSize QApplication::globalStrut()
  447. {
  448.     return app_strut;
  449. }
  450.  
  451. inline bool QApplication::sendEvent( QObject *receiver, QEvent *event )
  452. { return qApp ? qApp->notify( receiver, event ) : FALSE; }
  453.  
  454. inline bool QApplication::sendSpontaneousEvent( QObject *receiver, QEvent *event )
  455. { if ( event ) event->spont = TRUE; return qApp ? qApp->notify( receiver, event ) : FALSE; }
  456.  
  457. #ifdef QT_NO_TRANSLATION
  458. // Simple versions
  459. inline QString QApplication::translate( const char *, const char *sourceText,
  460.                     const char *, Encoding encoding ) const
  461. {
  462. #ifndef QT_NO_TEXTCODEC
  463.     if ( encoding == UnicodeUTF8 )
  464.     return QString::fromUtf8( sourceText );
  465.     else
  466. #endif
  467.     return QString::fromLatin1( sourceText );
  468. }
  469. #endif
  470.  
  471. inline int QApplication::horizontalAlignment( int align )
  472. {
  473.     align &= AlignHorizontal_Mask;
  474.     if ( align == AlignAuto ) {
  475.     if ( reverseLayout() )
  476.         align = AlignRight;
  477.     else
  478.         align = AlignLeft;
  479.     }
  480.     return align;
  481. }
  482.  
  483. #endif // QAPPLICATION_H
  484.  
  485.